#include <stdio.h>
#include <string.h>
// int my_strlen(char *p,int sz)
// {
//     //遍历字符数组 统计字符个数
//     int i=0;
//     int count=0;
//     for(i=0;i<sz;i++)
//     {
//         if(*(p+i)!='\0')
//         count++;
//     }
//     return count;
// }
// int main()
// {
//     //输入
//     char arr[1000]={0};
//     scanf("%s",arr);
//     //编写函数
//     int sz=strlen(arr); //sz=5
//     int m=0;
//     m=my_strlen(arr,sz);
//     //输出
//     printf("%d\n",m);
//     return 0;
// }
// int main()
// {
//     int i=0;
//     long long n=1;
//     for(i=1;i<5;i++)
//     {
//         n=n*i;
//     }
//     printf("n=%lld\n",n);
//     return 0;
// }
//结构体
//struct 里可以嵌套其他结构体   
// struct score
// {
//     //结构成员的类型
//     char subject[25];   // 科目
//     int math;   //数学成绩
//     int eng;    //英语成绩
// }c;         //生命类型的同时定义变量c
// struct peo
// {
//     //结构成员的类型
//     char name[20];
//     char tele[15];
//     int hight;
//     int weight;
//     struct score c;
// };
// int main()
// {
//     //初始化 
//     struct peo z={"赵嘉豪","150234567890",180,70,{"yingyu shuxue",88,98}}; 
//     //如果未完全初始化 那么在访问时其值不可预测
//     printf("%s %d %d\n",z.c.subject,z.c.math,z.c.eng);
//     return 0;
// }
//#################
//结构体指针的使用
//###############
//目的是使用一个函数打印出我结构体里的内容
////第一个版本 没有用指针
// struct stu
// {
//     char name[20]; //姓名
//     int class; //班级
//     int number;// 学号
//     int hight; //身高
//     int weight;//体重
// };
// void print(struct stu s) 
// {
//     printf("%s %d %d %d %d\n",s.name,s.class,s.number,s.hight,s.weight);
// }
// int main()
// {
//     struct stu s={"zjh",220321,22032120,180,70};//初始化结构体变量 s
//     //调用函数打印出s的内容 
//     print(s);
//     return 0;
// }
//##########
//第二个版本 理解一下指针
//###########
// struct stu
//  {
//     char name[20]; //姓名
//     int class; //班级
//     int number;// 学号
//     int hight; //身高
//     int weight;//体重
// };
// void print(struct stu *s) //用一个指针结构体变量来接收实参数s的地址
// {
//     printf("%s %d %d %d %d\n",s->name,(*s).class,(*s).number,(*s).hight,(*s).weight);
// }                           //这里的两种写法 要使用*一定记得加括号 这是指针的访问方式
                               // 操作符 . 优先级更高
// int main()
// {
//     struct stu s={"zjh",220321,22032120,180,70};//初始化结构体变量 s
//     //调用函数打印出s的内容 
//     print(&s);
//     return 0;
// }
// ????两个有什么区别呢
//函数传参的时候，参数是需要压栈的。  形参是实参的临时拷贝
//如果传递一个结构体对象的时候，结构体过大，参数压栈的的系统开销比较大，所以会导致性能的下降


#include <stdio.h>
//sum 函数实现前k项的和 
int sum(int k)
{
    int i=0;
    int sum=0;

    for(i=1;i<k+1;i++)
    {
        sum+=i;
        if(sum>=k)
        break;
    }
    return i;
}
int fun(int k)
{
    if(k>1)
    return fun(k-1)+sum(k);
    else
    return 1;
}
int main() {
    int k=0;
    scanf("%d",&k);
    int ret=fun(k);
    printf("%d\n",ret);
    return 0;
}